package 课上练习0419_scala_collection

import scala.collection.mutable.ArrayBuffer

/**
 * 分类：
 * 定长数组
 * 变长数组
 */
object Scala_01Array extends App {
  println("===============定长数组====================")
  println("===============创建数组====================")
  // 创建数组，指定元素个数
  val arr1 = new Array[Int](10)
  println("arr1: " + arr1.mkString("Array(", ", ", ")"))

  // 创建数组并完成赋值，调用数组内部apply方法完成赋值
  val arr2 = Array(1, 2, 3, 4)
  println("arr2: " + arr2.mkString("Array(", ", ", ")"))
  val arr3 = Array[Int]()// 创建空数组
  println("arr3: " + arr3.mkString("Array(", ", ", ")"))

  println("===============遍历数组====================")
  val arr4 = Array("zhangfei", "guanyu", "diaochan", "tianfeng")
  for (elem <- arr4) {println(elem)} // 第一种
  // 第二种
  arr4.foreach(e => println(e))
  arr4.foreach(println(_))
  // 第三种
  for(i <- 0 until arr4.length) println(arr4(i))
  for(i <- arr4.indices) println(arr4(i))

  println("===============过滤遍历====================")
  for (elem <- arr4 if elem.length < 7) {
    println(elem)
  }
  arr4.filter(_.length < 7).foreach(println(_))

  println("===============变长数组====================")
  println("===============创建数组====================")
  val arr5 = ArrayBuffer[Int]()
  println(arr5)
  println("===============添加元素====================")
  // 添加元素
  arr5.append(4).append(2) // 4 2
  // 插入元素
  arr5.insert(1, 12)  // 4 12 2
  println(arr5)
  println("===============使用标识符操作====================")
  arr5 += 1 // 末尾追加单个元素
  arr5 += (1, 2) // 末尾追加多个元素
  arr5 ++= Array(1, 2, 3) // 追加另一个数组
  println(arr5)
  println("===============删除元素====================")
  arr5.remove(2)
  println(arr5)
  arr5 -= 1
  println(arr5)
  arr5 --= Array(1, 2)
  println(arr5)

  println("===============二维数组====================")
  // 不规则二维数组
  val arr6 = new Array[Array[Int]](2)
  arr6(0) = Array(1, 2, 3, 4)
  arr6(1) = Array(1, 2, 3)
  // 规则二维数组，也是创建多维数组的第二种方法
  val arr7 = Array.ofDim[Int](3, 3)
  println("===============遍历二维数组====================")
  arr6.foreach(_.foreach(print(_)))
  println()

  println("===============数组--高阶函数filter map====================")
  println("===============map====================")
  val v1 = (1 to 9).map(_ * 2)
  println(v1)
}
